/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controladores;

import controladoresJPA.LigaUsuarioConsumidorJpaController;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import modelo.Consumidor;
import modelo.LigaUsuarioConsumidor;
import modelo.Usuario;
import negocio.ConsumidorBI;
import negocio.LigarUsuarioBI;
import negocio.UsuarioBI;

/**
 *
 * @author Francisco
 */
@ManagedBean(name="ligarConsumidorCtrl")
@ViewScoped
public class LigarConsumidorCtrl implements Serializable{
    
    @Inject
    private UsuarioBI usuarioBI;
    @Inject
    private ConsumidorBI consumidorBI;
    @Inject
    private LigarUsuarioBI ligarUsuarioBI;
    
    private Usuario usuario;
    private LoginCtrl login;
    
    private Map<String, Integer> consumidores;
    private String consumidorSeleccionado;
    private String nomUsuDestino;
    private Boolean permisoIngreso;
    private Boolean permisoConsumo;
    
    @PostConstruct
    public void init(){
        try{
            login = (LoginCtrl)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
            String nombreUsuario = login.getUsuario();
            usuario = usuarioBI.buscarUsuario(nombreUsuario);
            List<Consumidor> consumidoresUsu = consumidorBI.buscarConsumidoresPorUsuario(usuario.getIdUsuario());
            consumidores = new HashMap<String, Integer>();
            for (Consumidor consumidor : consumidoresUsu) {
                if(!consumidor.getIdConsumidor().equals(usuario.getIdConsumidor().getIdConsumidor())){
                    consumidores.put(consumidor.getNombre(), consumidor.getIdConsumidor());
                }
            }
        }catch(Exception e){
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void guardar(){
        try{
            
            boolean error = false;
            if(consumidorSeleccionado==null){
                error = true;
                FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El consuimdor es necesario"));
            }
            if(nomUsuDestino==null||nomUsuDestino.equals("")){
                error = true;
                FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El nombre de usuario es necesario"));
            }
            if(error){
                return;
            }
            
            Usuario usuDest = usuarioBI.buscarUsuario(nomUsuDestino);
            if(usuDest==null){
                error = true;
                FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El nombre de usuario destino no existe"));
            }
            
            Consumidor cons = consumidorBI.buscarConsumidor(Integer.valueOf(consumidorSeleccionado));
            if(cons==null){
                error = true;
                FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "El consumidor no existe"));
            }
            
            if(error){
                return;
            }
            
            LigaUsuarioConsumidor luc = new LigaUsuarioConsumidor();
            luc.setIdConsumidor(cons);
            luc.setPermisoConsumo(((permisoConsumo)?1:0));
            luc.setPermisoIngreso(((permisoIngreso)?1:0));
            luc.setIdUsuario(usuDest);
            luc.setEstatus("P");
            ligarUsuarioBI.crearLiga(luc);
            cancelar();
            
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_INFO, "Listo", "Guardado con éxito"));
        }catch(Exception e){{
            
        }
            FacesContext.getCurrentInstance()
                    .addMessage(null, 
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", e.getMessage()));
        }
    }
    
    public void cancelar(){
        consumidorSeleccionado = "";
        nomUsuDestino = "";
        permisoConsumo = false;
        permisoIngreso = false;
    }

    public String getConsumidorSeleccionado() {
        return consumidorSeleccionado;
    }

    public void setConsumidorSeleccionado(String consumidorSeleccionado) {
        this.consumidorSeleccionado = consumidorSeleccionado;
    }

    public String getNomUsuDestino() {
        return nomUsuDestino;
    }

    public void setNomUsuDestino(String nomUsuDestino) {
        this.nomUsuDestino = nomUsuDestino;
    }

    public Boolean getPermisoIngreso() {
        return permisoIngreso;
    }

    public void setPermisoIngreso(Boolean permisoIngreso) {
        this.permisoIngreso = permisoIngreso;
    }

    public Boolean getPermisoConsumo() {
        return permisoConsumo;
    }

    public void setPermisoConsumo(Boolean permisoConsumo) {
        this.permisoConsumo = permisoConsumo;
    }

    public Map<String, Integer> getConsumidores() {
        return consumidores;
    }

    public void setConsumidores(Map<String, Integer> consumidores) {
        this.consumidores = consumidores;
    }
    
}
